home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Original Shareware 1.1
/
The Original Shareware (WeMake CDs)(Volume 1.1)(CDs, Inc)(1993).iso
/
18
/
fpc103.zip
/
UTILS.SEQ
< prev
next >
Wrap
Text File
|
1988-06-28
|
6KB
|
200 lines
\ UTILS.SEQ Some basic utilities
: ? ( adr -- )
@ . ;
: YCOUNT ( a1 --- a2 n1 )
DUP 1+ SWAP YC@ ;
: ?ENOUGH ( n -- )
DEPTH 1- > ABORT" Not enough Parameters" ;
: BS'S ( n1 --- )
0 MAX 80 MIN 0 ?DO 8 EMIT -2 #OUT +! LOOP ;
: .FREE ( -- )
." Free Bytes:"
." CODE = " SP@ HERE - (U.) TYPE
." , LIST = " #LISTSEGS XHERE DROP XSEG @ - - 16 *D 1 D.R
." , HEAD = " #HEADSEGS 16 * YHERE - (U.) TYPE ;
: @REL>ABS ( A1 --- A2 ) \ CONVERT CONTENTS OF A1
DUP 1+ @ SWAP 3 + + ; \ FROM RELATIVE TO ABSOLUTE
: DRIVE? ( -- ) 0 25 BDOS ASCII A + EMIT ." : " ;
\ These are needed by later utilities
DEFER CCR ' CR IS CCR \ Carraige Carraige return?
DEFER .DEFSRC ' NOOP IS .DEFSRC \ Nothing for now, may be set
\ to display the source for the
\ current definition.
VARIABLE DEFCFA \ Holds the CFA of the current word.
VARIABLE PFASAV \ Current offset into definition.
2VARIABLE CTIME GETTIME CTIME 2!
2VARIABLE CDATE GETDATE CDATE 2!
: LARGEST ( addr n -- addr' val )
OVER 0 SWAP ROT 0
DO 2DUP @ U<
IF -ROT 2DROP DUP @ OVER
THEN 2+
LOOP DROP ;
\ : LABEL PRECODE CREATE ASSEMBLER ;
: DOES? ( IP -- IP' F ) \ IP IS ACTUALLY CFA, IP' IS PFA
DUP >BODY SWAP @REL>ABS @REL>ABS
['] FORTH @REL>ABS @REL>ABS = ;
' HEX @REL>ABS CONSTANT 'DOCOL
: >.ID ( A1 --- )
DUP 200 U< IF DROP EXIT THEN
128 0
DO DUP @REL>ABS 'DOCOL =
IF LEAVE ELSE 1- THEN
LOOP >NAME .ID ;
VARIABLE FUDGE 65 FUDGE ! \ 65 = 8Mhz AT Clone
\ 100 = 10Mhz AT Clone
: MS ( n -- )
0 ?DO FUDGE @ 0 ?DO PAUSE LOOP LOOP ;
HEX
: setfudge ( --- )
( DEFERS INITSTUFF )
SEQINIT \ Should use above line. but DEFERS
\ is defined later.
F000 FFFE c@l 00FC = \ 00FC = PCAT
if 41 else 0F then fudge ! ; \ 00FF = PC
\ 00FE = XT
' SETFUDGE IS INITSTUFF \ 00FD = PCjr
\ 002D = Compaq PC
\ 009A = Compaq XT
DECIMAL
: U<= ( u1 u2 -- f ) U> NOT ;
: U>= ( u1 u2 -- f ) U< NOT ;
: <= ( n1 n2 -- f ) > NOT ;
: >= ( n1 n2 -- f ) < NOT ;
: 0>= ( n1 n2 -- f ) 0< NOT ;
: 0<= ( n1 n2 -- f ) 0> NOT ;
VARIABLE #TIMES ( # times already performed ) 1 #TIMES !
: TIMES ( n -- )
1 #TIMES +! #TIMES @
< IF 1 #TIMES ! ELSE >IN OFF THEN ;
: MANY ( -- )
KEY? NOT IF >IN OFF THEN ;
: AT ( col row -- ) ( 0 0 is upper left )
DOES> >R 2DUP R> PERFORM #LINE ! #OUT ! ; AT
' 2DROP IS AT
: DARK ( -- )
DOES> PERFORM #LINE OFF #OUT OFF ; DARK
' NOOP IS DARK
: ?DARK ( -- )
KEY? 0= IF DARK CR THEN ;
DEFER -LINE
VARIABLE #PAGE
: PAGE ( -- )
DOES> PERFORM 1 #PAGE +! #LINE OFF #OUT OFF ; PAGE
: FORM-FEED ( -- ) CONTROL M EMIT CONTROL L EMIT ;
' FORM-FEED IS PAGE
: ?PAGE ( --- ) \ PAGE IF LINE CNT NOT ZERO
#LINE @
IF PAGE
THEN ;
: ALIAS ( A1 | alias_NAME --- ) \ creates alias_NAME pointing
>R CREATE -3 ALLOT YHERE 2- \ A1=CFA OF REAL NAME
R> >NAME YCOUNT 31 AND + Y@
SWAP Y! ;
VARIABLE NLEN
: >NAME.ID ( CFA --- )
>NAME DUP YC@ 31 AND DUP ?LINE NLEN ! .ID ;
DEFER (SEE)
DEFER INSTALLSTUFF ' NOOP IS INSTALLSTUFF
DEFER UNINSTALLSTUFF ' NOOP IS UNINSTALLSTUFF
DEFER >ATTRIB1 ' NOOP IS >ATTRIB1
DEFER >ATTRIB2 ' NOOP IS >ATTRIB2
DEFER >ATTRIB3 ' NOOP IS >ATTRIB3
DEFER >ATTRIB4 ' NOOP IS >ATTRIB4
DEFER >NORM ' NOOP IS >NORM
DECIMAL
VARIABLE RESTBASE 10 RESTBASE !
VARIABLE RESTCAPS RESTCAPS ON
VARIABLE RESTTABS 8 RESTTABS !
VARIABLE RESTLMRG RESTLMRG OFF
VARIABLE RESTRMRG 70 RESTRMRG !
VARIABLE RESTSTAT RESTSTAT OFF
VARIABLE STATV STATV OFF
: SAVESTATE ( --- )
BASE @ RESTBASE !
CAPS @ RESTCAPS !
LMARGIN @ RESTLMRG !
RMARGIN @ RESTRMRG !
TABSIZE @ RESTTABS !
STATV @ RESTSTAT ! ;
: RESTORESTATE ( --- )
RESTSTAT @ STATV !
RESTBASE @ BASE !
RESTCAPS @ CAPS !
RESTLMRG @ LMARGIN !
RESTRMRG @ RMARGIN !
RESTTABS @ TABSIZE ! ;
: DEFAULTSTATE ( --- )
RESTSTAT ON
10 RESTBASE !
RESTCAPS ON
8 RESTTABS !
RESTLMRG OFF
70 RESTRMRG !
RESTORESTATE ;
: ?DOSTOP ( F1 --- )
IF RESTORESTATE
TRUE ABORT" Stopped"
THEN ;
: ?KEYPAUSE ( --- ) \ Pause if key pressed
KEY?
IF KEY 27 = ?DOSTOP
KEY 27 = ?DOSTOP
THEN ;
: $>TIB ( a1 --- )
COUNT >R TIB R@ CMOVE R@ SPAN ! R> #TIB ! >IN OFF ;